package com.springCloud.eureka;

/**
 * 心跳机制
 * 停止实例的时候更新注册表
 * 自动故障感知
 * 自我保护机制
 */
public class EurekaDemo2 {

    /**
     * 心跳机制
     * DiscoveryClient初始化后
     * 会初始化任务调度线程池
     * 这里面有个一个30s执行的定时任
     * 发送请求给EurekaServer
     * 找到对应的appName，更新lastUpdateTimeStamp
     */
    public void demo1(){

    }

    /**
     * 服务下线更新注册表
     * 会有个一个shatdown的注释
     * 停止的时候调用此方法
     * shutdown线程池，释放资源
     * 将实列状态设置为Down
     * 调用jersey的网络组件 发送http请求到EurekaServer
     *
     * 经过filter，调用对应的方法
     * 从Map中剔除这个服务，然后把变更的信息存到一个队列中，其他服务增量拉取的时候可以感知到
     * 然后过期掉读写缓存，30后只读缓存发现这个读写缓存中没有数据，从内存中依次填充数据到缓存。
     *
     */
    public void demo2(){

    }

    /**
     * 自动故障感知
     * 有一个定时任务，会每隔60s去检查缓存中的服务
     * 如果超过90s没有发送心跳过来，就会剔除该服务
     *
     * 补偿时间
     * 获取上次执行的时间，然后用现在开始执行的时间，得出一个延迟的时间。就是补偿时间
     * 本来是60s执行一次，但是可能应用gc卡顿等原因
     *
     * 剔除服务，
     * 如果是超过180s没有心跳续约，就会剔除这个服务。
     *
     * 分批剔除
     * 不会一次性剔除所有服务，大概只会剔除百分之15
     *
     */
    public void demo3(){

    }

    /**
     * 自我保护机制
     *
     * 判断上一分钟的心跳次数，是否小于预期的心跳次数，如果小于，就不让剔除服务，进入自我保护机制。
     * 默认每分钟续约数量要大于0.85
     *
     * 服务更新的时候，也会动态更新这个续约数量。
     */
    public void demo4(){

    }
}
